Code size

In order to compare minimum application sizes, an executable that prints the string ``Hello World!'' and then exits was created using three different Lisps. The resulting executable sizes are listed in table [*].

AKCL [#!akcl!#] is a modified version of KCL [#!kcl!#]. The ACKL executable was produced with the save-system command. AKCL simply dumps a memory image of the running Lisp, and thus the executable's size is essentially the same size as the Lisp development environment's size.

The Lucid [#!lucid!#] executable was produced using Lucid's delivery toolkit. This toolkit is based on the concept of treeshaking. Starting from a known root set in a running Lisp, all functions that are not required in the final application are ``shaken'' away, leaving only the required portions of the runtime system. Because Lisp's inherently intertwined nature makes it difficult to determine at link time which functions will really be needed at runtime, the toolkit provides a fairly complex set of options for manually declaring what will be needed in the final application.

The WCL executable was linked with the shared Common Lisp library described earlier. The use of a shared library has important implications for delivering and running many Lisp based applications on a single machine. Using the Lucid or AKCL ``disksave'' approach, ten other applications that are similar to the ``Hello World!'' program will not only require the same amount of disk space as ``Hello World!'', but they will also contain ten almost identical copies of the Common Lisp runtime library that will not be shared on disk or in memory. This lack of sharing dramatically increases the amount of memory required to run several Lisp based applications at once. A shared library can also be replaced at anytime by a newer version of itself without recompiling or relinking any of the applications which use the library, thus making it easy for all applications to benefit from bug fixes or performance improvements.